package com.niit.serializtion;

import org.junit.Test;

import java.io.*;

/**
 * Date:2024/10/8
 * Author：Ys
 * Description: 将Person对象进行序列化和反序列化
 */
public class TestSer {


    //这是一个将Person对象进行序列化的方法，将Person对象序列化成为一个文件，并文件内是二进制数据
    @Test
    public void ser() throws IOException {
        //1.定义将Person序列化后的文件地址
        File file = new File("input/person.txt");
        //2.把序列化的内容通过流的形式写入到文件
        FileOutputStream outputStream = new FileOutputStream(file);
        //3.将结构化的对象转换为二进制的数据
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        //4.创建一个Person对象,并添加数据
        Person person = new Person(1001, "张三", 23,"新加坡");
        //5.进行序列化
        person.write(dataOutputStream);
        //6.关闭流
        dataOutputStream.close();
        outputStream.close();
    }

    //这是一个将Person对象进行反序列化的方法
    @Test
    public void deSer() throws IOException {
        //1.定义反序列化的文件地址
        File file = new File("input/person.txt");
        //2.读取要反序列化的文件内容
        FileInputStream fileInputStream = new FileInputStream(file);
        //3.将二进制数据转换为结构化的对象
        DataInputStream dataInputStream = new DataInputStream(fileInputStream);
        //4.创建一个Person对象，用于接收反序列化后的数据
        Person person = new Person();
        person.readFields(dataInputStream);
        //5.关闭流
        dataInputStream.close();
        fileInputStream.close();
        //6.输出反序列化后的数据
        System.out.println("反序列化的结果："+person);
    }
}
